/**
 * 找出序列中乘积最大的连续子序列
 * example:[-2,3,-1] 
 * return: 6
 * @param {number[]} nums 
 */
var maxProduct = function (nums) {
    // 初始化最大乘积数组、最小乘积数组（应对负负得正的可能性）
    const maxProductMemo = []
    const minProductMemo = []
    maxProductMemo[0] = nums[0]
    minProductMemo[0] = nums[0]

    let max = nums[0]
    for (let i = 1; i < nums.length; i++) {
        //  nums[i] * minProductMemo[i - 1]应对负负得正的可能性
        maxProductMemo[i] = Math.max(nums[i], nums[i] * maxProductMemo[i - 1], nums[i] * minProductMemo[i - 1])
        minProductMemo[i] = Math.min(nums[i], nums[i] * maxProductMemo[i - 1], nums[i] * minProductMemo[i - 1])

        // 每生成一个maxProductMemo[i]就与max比较
        max = Math.max(max, maxProductMemo[i])
    }

    return max
}